const NodeMediaServer = require('node-media-server');

const config = {
  rtmp: {
    port: 1935,
    chunk_size: 60000,
    gop_cache: true,
    ping: 30,
    ping_timeout: 60
  },
  // rtsp: {
  //   port: 554, // 默认的RTSP端口是554
  //   // 其他RTSP配置...
  // },
  http: {
    port: 8000,
    allow_origin: '*',
    mediaroot: './media'
  },
  trans: {
    ffmpeg: 'D:/programes/ffmpeg/bin/ffmpeg.exe',
    tasks: [
      {
        app: 'live',

        hls: true, // DASH 直播流
        hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]',
        hlsKeep: true, // to prevent hls file delete after end the stream

        dash: true, // HLS 直播流
        dashFlags: '[f=dash:window_size=3:extra_window_size=5]',
        dashKeep: true, // to prevent dash file delete after end the stream
      },
      /* 直播录制为MP4文件 */
      {
        app: 'vod',
        mp4: true,
        mp4Flags: '[movflags=faststart]',
      }
    ]
  },
  relay: {
    ffmpeg: 'D:/programes/ffmpeg/bin/ffmpeg.exe',
    tasks: [
      /* 静态拉流，静态拉流模式在服务启动时执行，当发生错误时自动重连。可以是一个直播流，也可以是一个本地文件。理论上并不限制是RTSP或RTMP协议 */
      {
        app: 'live',
        name: 'stream',
        mode: 'static',
        // edge: 'rtsp://user:password@localhost:554/live/stream/1',
        edge: 'rtsp://localhost:554/live/stream',
        // rtsp_transport: 'tcp', // ['udp', 'tcp', 'udp_multicast', 'http'] // 添加后则失败
      },
      // {
      //   app: 'live',
      //   name: 'hks'
      //   mode: 'static',
      //   edge: 'rtmp://live.hkstv.hk.lxdns.com/live/hks',
      // },
      // {
      //   app: 'mv',
      //   name: 'dq'
      //   mode: 'static',
      //   edge: './video/demo.mp4',
      // },
      /* 动态拉流，当本地服务器收到一个播放请求，如果这个流不存在，则从配置的边缘服务器拉取这个流。当没有客户端播放这个流时，自动断开。 */
      // {
      //   app: 'live',
      //   mode: 'pull',
      //   edge: 'rtmp://192.168.0.20',
      // },
      /* 动态推流，当本地服务器收到一个发布请求，自动将这个流推送到边缘服务器 */
      // {
      //   app: 'live',
      //   mode: 'push',
      //   edge: 'rtmp://192.168.0.10',
      // }
    ]
  },
  // auth: {
    /* 保护API */
    // api : true,
    // api_user: 'admin',
    // api_pass: 'nms2018',
    /* 验证秘钥 */
    // play: true,
    // publish: true,
    // secret: 'nodemedia2017privatekey'
  // }
};

var nms = new NodeMediaServer(config)
nms.run();

/*
FFmpeg
-re：以原始视频的速度播放输入，确保实时性。
-stream_loop 循环读取视频源的次数，-1为无线循环
-i input_video.mp4：指定输入视频文件。
-c copy：复制编码信息，不重新编码。
-c:v 指定视频编码器
-c:a 指定音频编码器
-vn 去除视频流
-an 去除音频流
-f rtsp：指定输出格式为RTSP

1、FFmpeg推流：
ffmpeg –version
H.264+AAC的视频文件转直播
ffmpeg -re -stream_loop -1 -i ./video/demo.mp4 -c copy -f flv rtmp://localhost:1935/live/stream
其他编码格式，需要转为h.264+AAC的编码转直播
ffmpeg -stream_loop -1 -re -i ./video/demo.mp4 -c:v libx264 -preset superfast -tune zerolatency -c:a aac -ar 44100 -f flv rtmp://localhost:1935/live/stream
FFmpeg将RTSP流转换为RTMP流
ffmpeg  -rtsp_transport tcp -re -i rtsp://user:password@ip:port/1 -c copy -f flv rtmp://localhost:1935/live/stream
ffmpeg -i rtsp://localhost:554/live/stream -vcodec h264 -acodec aac -f flv rtmp://localhost:1935/live/stream
FFmpeg将视频文件转换为RTSP流
ffmpeg -rtsp_transport tcp -stream_loop -1 -re -i ./video/demo.mp4 -c copy -f rtsp rtsp://localhost:554/live/stream
FFmpeg将RTMP流转换为RTSP流
ffmpeg -rtsp_transport tcp -re -i rtmp://localhost:1935/live/stream -c copy -f rtsp rtsp://localhost:554/live/stream

FFmpeg播放直播流
RTMP 流格式
ffplay rtmp://localhost/live/stream
http-flv 流格式
ffplay http://localhost:8000/live/stream.flv

2、OBS推流：
url: rtmp://localhost:1935/live key: stream

播放地址:
rtmp: rtmp://localhost:1935/live/stream
http-flv: http://localhost:8000/live/stream.flv
HLS: http://localhost:8000/live/stream/index.m3u8
DASH: http://localhost:8000/live/stream/index.mpd
websocket-flv: ws://localhost:8000/live/stream.flv

管理地址：
http://localhost:8000/admin/
流信息统计：
http://localhost:8000/api/streams
服务器信息统计：
http://localhost:8000/api/server
*/